package com.example.lcode.greedy;

/**
 *
 给你一个非负整数数组 nums ，你最初位于数组的第一个位置。

 数组中的每个元素代表你在该位置可以跳跃的最大长度。

 你的目标是使用最少的跳跃次数到达数组的最后一个位置。

 假设你总是可以到达数组的最后一个位置。

 示例 1:

 输入: nums = [2,3,1,1,4]
 输出: 2
 解释: 跳到最后一个位置的最小跳跃数是 2。
 从下标为 0 跳到下标为 1 的位置，跳 1 步，然后跳 3 步到达数组的最后一个位置。
 示例 2:

 输入: nums = [2,3,0,1,4]
 输出: 2
 */
public class Question45 {

    public int jump(int[] nums) {
        int index = 0;
        int step = 0;
        if (nums == null || nums.length <= 1) {
            return step;
        } else if (nums[0] >= nums.length - 1) {
            return 1;
        }
        while (index < nums.length - 1) {
            int max = 0;
            int maxIndex = 0;
            for (int i = index + 1; i <= nums[index] + index; i++) {
                if (i >= nums.length || nums[index] + index >= nums.length - 1) {
                    maxIndex = nums.length - 1;
                    break;
                }
                if (max < i + nums[i]) {
                    max = i + nums[i];
                    maxIndex = i;
                }
            }
            step ++;
            index = maxIndex;
        }
        return step;
    }

    public static void main(String[] args) {
        int []arrays = {7,0,9,6,9,6,1,7,9,0,1,2,9,0,3};
        Question45 question45 = new Question45();
        int jump = question45.jump(arrays);
        System.out.println(jump);
    }

}
